/**
 * 选区模型
 * 选区模型关注：anchor开始位置，focus：结束位置
 */

import EventEmitter from "events";
export class SelectionModel extends EventEmitter {
    textModel_;
    selection_;
    constructor(textModel) {
        super()
        this.textModel_ = textModel
        
        /**
         * anchor： 光标开始的位置
         * focus：光标结束的位置
         */
        this.selection_ = { anchor: 0, focus: 0 }
    }
    getSelection () {
        return { ...this.selection_ } // 不允许外界修改我的数据
    }
    // 设置选区
    setSelection (selection) {
        if (selection && this.selection_ && selection.anchor === this.selection_.anchor && selection.focus === this.selection_.focus) {
            return
        }
        this.selection_ = selection ? { ...selection } : null
    }
    // 判断光标是否是重合的：如果光标的开始位置和结束位置重合，则光标是闭合状态
    isCollapsed () {
        return this.selection_ && this.selection_.anchor === this.selection_.focus
    }

    // 用户设置选区有2种操作：1.从左往右创建选区，2.从右往左创建选区。根据anchor和focus的大小可以判断出用户是从哪个方向创建的选区
    // 判断是否是从左往右创建选区
    isBackward () {
        return this.selection_ && this.selection_.anchor > this.selection_.focus
    }
}
export default SelectionModel;